package com.mdd.front.service;

import java.util.List;

import com.mdd.common.core.AjaxResult;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.UserCommemorate;
import com.mdd.common.entity.UserFriend;
import com.mdd.common.entity.UserFriendGroup;
import com.mdd.common.entity.UserFriendRequest;
import com.mdd.front.validate.common.PageValidate;
import com.mdd.front.vo.friend.FriendInfoVo;
import com.mdd.front.vo.friend.UserCommemorateVo;
import com.mdd.front.vo.user.UserLableGroupVo;

/**
 * 	好友相关API
 * @author DEREK
 *
 */
public interface IFriendService {

	/**
	 * 	导入通讯录好友
	 * @param list
	 * @return
	 */
	AjaxResult<Object> importCommunicateUser(List<UserFriend> list,Integer userId);
	
	/**
	 * 好友列表
	 * @param userId
	 * @param pageValidate
	 * @return
	 */
	List<UserFriend> friendList(Integer userId,String keyword);
	
	/**
	 * 通讯录列表
	 * @param userId
	 * @param pageValidate
	 * @return
	 */
	PageResult<UserFriend> communicateList(Integer userId,PageValidate pageValidate,String keyword);
	
	AjaxResult<Object> deleteCommunicate(Integer userId,Integer id);
	
	/**
	 * 	添加通讯录好友
	 * @param list
	 * @return
	 */
	AjaxResult<Object> addCommunicateUser(UserFriend userFriend,Integer userId);
	
	/**
	 * 	修改通讯录好友
	 * @param list
	 * @return
	 */
	AjaxResult<Object> updCommunicateUser(UserFriend userFriend,Integer userId);
	
	
	/**
	 * 好友申请列表
	 * @param userId
	 * @param pageValidate
	 * @return
	 */
	PageResult<FriendInfoVo> friendRequestList(Integer userId,PageValidate pageValidate);
	
	/**
	 * 	添加用户标签分组
	 * @param userFriendGroup
	 * @param userId
	 * @return
	 */
	AjaxResult<Object> addUserGroup(UserFriendGroup userFriendGroup,Integer userId);
	
	/**
	 * 	修改用户标签分组
	 * @param userFriendGroup
	 * @param userId
	 * @return
	 */
	AjaxResult<Object> updUserGroup(UserFriendGroup userFriendGroup,Integer userId);
	
	/**
	 * 	设置用户分组
	 * @param userFriendGroup
	 * @param userId
	 * @return
	 */
	AjaxResult<Object> setUserGroup(UserFriendGroup userFriendGroup,Integer userId);
	
	/**
	 * 	移除特别关注
	 * @param toUserId
	 * @param userId
	 * @return
	 */
	AjaxResult<Object> removeFollow(String toUserId,Integer userId);
	
	/**
	 * 特别关注的好友列表
	 * @param userId
	 * @param pageValidate
	 * @return
	 */
	PageResult<UserFriend> specialFriendList(Integer userId,PageValidate pageValidate);
	
	/**
	 * 	标签分组列表
	 * @param userId
	 * @return
	 */
	List<UserLableGroupVo> lableGroupList(Integer userId);
	
	/**
	 * 	黑名单列表
	 * @param userId
	 * @param pageValidate
	 * @return
	 */
	PageResult<FriendInfoVo> userBlacklist(Integer userId,PageValidate pageValidate);
	
	/**
	 * 	拉黑或者取消拉黑
	 * @param userId
	 * @param toUserId
	 * @return
	 */
	AjaxResult<Object> blockOrUnBlock(Integer userId,Integer toUserId);
	
	/**
	 * 	好友请求
	 * @param userId
	 * @param toUserId
	 * @return
	 */
	AjaxResult<Object> applyforFriend(Integer userId,Integer toUserId);
	
	/**
	 * 	好友请求处理
	 * @param userId
	 * @param userFriendRequest
	 * @return
	 */
	AjaxResult<Object> applyforFriendHandle(Integer userId,UserFriendRequest userFriendRequest);
	
	/**
	 * 	删除好友
	 * @param userId
	 * @param toUserId
	 * @return
	 */
	AjaxResult<Object> delFriend(Integer userId,Integer toUserId);
	
	/**
	 * 	好友详情
	 * @param userId
	 * @param toUserId
	 * @return
	 */
	UserFriend friendDetail(Integer userId,Integer toUserId);
	
	/**
	 * 	设置纪念日
	 * @param userId
	 * @param toUserId
	 * @return
	 */
	AjaxResult<Object> setCommemorate(Integer userId,UserCommemorate userCommemorate);
	
	/**
	 * 	用户纪念日列表
	 * @param currUserId
	 * @param userId
	 * @param pageValidate
	 * @return
	 */
	PageResult<UserCommemorateVo> userCommemorateList(Integer currUserId,Integer userId,PageValidate pageValidate);
	
	/**
	 * 	设置提醒
	 * @param userId
	 * @param id
	 * @return
	 */
	AjaxResult<Object> commemorateRemind(Integer userId,Integer id);
	
}
